package br.com.saeng2D.formulario;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.imageio.ImageIO;
import javax.swing.ActionMap;
import javax.swing.BorderFactory;
import javax.swing.GroupLayout;
import javax.swing.ImageIcon;
import javax.swing.InputMap;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.LayoutStyle;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

import br.com.saeng2D.analiseLxSi.MatrizCrammer;
import br.com.saeng2D.formulario.caixa_apoio.DialogoApoios;
import br.com.saeng2D.formulario.caixa_forca_c_m.DialogoForcaCentralizadaMomento;
import br.com.saeng2D.formulario.caixa_forca_d_t.DialogoForcaDistribuidaTriangular;
import br.com.saeng2D.formulario.caixa_reacao.DialogoReacao;
import br.com.saeng2D.objeto.AbstratoObjeto;
import br.com.saeng2D.objeto.animado.AbstratoAnimado;
import br.com.saeng2D.objeto.forca.AbstratoForca;
import br.com.saeng2D.objeto.forca.ForcaCentralizada;
import br.com.saeng2D.objeto.forca.ForcaCentralizada2;
import br.com.saeng2D.objeto.forca.ForcaMomento;
import br.com.saeng2D.objeto.linha.Linha;
import br.com.saeng2D.objeto.ponto.Ponto;
import br.com.saeng2D.superficie.Grade;
import br.com.saeng2D.superficie.Superficie;
import br.com.saeng2D.superficie.action.ExcluirObjetoSelecionadoAction;
import br.com.saeng2D.superficie.action.ExcluirUltimoObjetoAdicionadoAction;
import br.com.saeng2D.superficie.action.SalvarAction;
import br.com.saeng2D.superficie.action.SalvarComoAction;
import br.com.saeng2D.superficie.builder.LinhaArrastoBuilder;
import br.com.saeng2D.superficie.builder.LinhaDivisaoBuilder;
import br.com.saeng2D.superficie.select.SelecionaObjetos;
import br.com.saeng2D.superficie.select.SelecionadorPonto;
import br.com.saeng2D.superficie.select.SelecionadorPonto2;
import br.com.saeng2D.superficie.select.SelecionadorStateMomento;
import br.com.saeng2D.superficie.select.SelecionadorStateX;
import br.com.saeng2D.superficie.select.SelecionadorStateY;
import br.com.saeng2D.superficie.select.SelecionadorSuperficieClone;
import br.com.saeng2D.util.Calculadora;
import br.com.saeng2D.util.P2D;
import br.com.saeng2D.util.PacoteButton;
import br.com.saeng2D.util.Resultados;
import br.com.saeng2D.util.Util;

public class FormularioPrincipal extends JFrame {
	private static final long serialVersionUID = 1L;
	
//	private JRadioButtonMenuItem radioButtonCriacaoLinhaArrasto;
//	private JRadioButtonMenuItem radioButtonCriacaoLinhaClick;
//	private JCheckBoxMenuItem checkDemarcarLinhaComPonto;
	private JCheckBoxMenuItem checkDesenharGrades;

//	private JMenuItem menuItemDetalharObjetoSelecionado;
	private JMenuItem menuItemApareanciaPadraoJava;
//	private JMenuItem menuItemLadoGradeSuperficie;
	private JMenuItem menuItemApareanciaSistema;
	private JMenuItem menuItemDCL;
	private JMenuItem menuItemSobreSAENG2D;
	private JMenuItem menuItemSelecaoForca;
	private JMenuItem menuItemSelecaoApoio;
	private JMenuItem menuItemSalvarComo;
	private JMenuItem menuItemQtdObjetos;
	private JMenuItem menuItemCriarPonto;
	private JMenuItem menuItemExcluirSel;
	private JMenuItem menuItemCriarLinha;
	private JMenuItem menuItemSomatorio;
	private JMenuItem menuItemDesfazer;
	private JMenuItem menuItemSalvar;
	private JMenuItem menuItemLimpar;
	private JMenuItem menuItemAbrir;
	private JMenuItem menuItemNovo;
	private JMenuItem menuItemSair;
	private JMenuItem menuItemManual;
	private JMenuItem menuItemCalculadora;
	private JMenuItem menuItemExemplos;
	private JMenuItem menuItemImprimir;
	
	private JMenuBar menuPrincipal;

	private JMenu menuFerramenta;
	private JMenu menuDesenhar;
	private JMenu menuArquivo;
	private JMenu menuEditar;
	private JMenu menuAjuda;	
	//private JMenu menuForca;
	//private JMenu menuSelecaoApoio;

	private JButton buttonDiagragraCorpoLivre;
	private JButton buttonSomatorioForca;
	private JButton buttonSelecaoApoio;
	private JButton buttonSelecaoForca;
	private JButton buttonCriarLinha;
	private JButton buttonCriarPonto;
	private JButton buttonSelecao;
	private JButton buttonReacao;
	private JButton buttonConfirmacaoFx;
	private JButton buttonCancelarFx;
	private JButton buttonConfirmacaoFy;
	private JButton buttonCancelarFy;
	private JButton buttonConfirmacaoM;
	private JButton buttonCancelarM;
	
	private JButton buttonManual;
	private JButton buttonExemplos;
	private JButton buttonCalculadora;
	private JButton buttonResultados;
	
	private JLabel labelDiagrama;
	private JLabel labelEqui_Externo;
	private JLabel labelFx_Externo;
	private JLabel labelFy_Externo;
	private JLabel labelM_Externo;
	private JLabel labelAreaCliente;
	private JLabel labelEquacoes;
	private JLabel jLabelTamanho;
	private JLabel jLabelEscala;
	
//	private static JTextField textFieldTamanho;
//	private JTextField jTextEscala;
	
	private JPanel painelDiagramaCorpoLivre;
	private JPanel painelControleOeste;
	private JPanel painelEquacoes;
	private JPanel painelBotoesSomatorioX;
	private JPanel painelBotoesSomatorioY;
	private JPanel painelBotoesSomatorioM;
	private JPanel painelAuxiliar;
	

	private JScrollPane scrollPaneDiagramaCorpoLivre;
	private JScrollPane scrollSuperficie;
	private JScrollPane scrollPainelEquacoes;
	private JScrollPane scrollSomatorioFX;
	private JScrollPane scrollSomatorioFY;
	private JScrollPane scrollSomatorioM;
		
	private JTextArea textAreaSomatorioFX;
	private JTextArea textAreaSomatorioFY;
	private JTextArea textAreaSomatorioM;
	
	private ArrayList<String> valorVariaveis;
	
	//Objetos criados/manipulados na aplicacao
	private final Superficie superficie;
	//Area para plotagem dos objetos
	private Superficie superficieClone;
	
	//Destacar o botao do menu da lateral
	private PacoteButton pacoteButton;

	//Construtor
	public FormularioPrincipal() {
		super(Util.getString("label_titulo_aplicacao"));
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		superficie = new Superficie(this);
		montarMenuAplicacao();
		montarLayoutObjetos();
		manipuladoresEvento();
	}
	
	public void montarMenuAplicacao() {
		//iniciandoMenuPrincipal
		menuPrincipal = new JMenuBar();
		menuArquivo = new JMenu("Arquivo");
		menuEditar = new JMenu("Editar");
		menuFerramenta = new JMenu("Ferramentas");
		menuAjuda = new JMenu("Ajuda");
		
		//iniciandoMenuItensArquivo
		menuItemNovo = new JMenuItem("Novo");
		menuItemAbrir = new JMenuItem("Abrir");
		menuItemSalvar = new JMenuItem("Salvar");
		menuItemSalvarComo = new JMenuItem("Salvar como");
		checkDesenharGrades = new JCheckBoxMenuItem("Desenhar grade", Util.getBoolean("desenhar_grade"));
//		menuItemLadoGradeSuperficie = new JMenuItem("Alterar grade");
//		checkDemarcarLinhaComPonto = new JCheckBoxMenuItem("PONTOS nos extremos da linha", Util.getBoolean("pontosNosExtremosDaLinha"));
		menuItemSair = new JMenuItem("Sair");
		menuItemSair.setAccelerator(KeyStroke.getKeyStroke('S', InputEvent.ALT_MASK));
		menuItemImprimir = new JMenuItem("Imprimir");
		menuItemImprimir.setAccelerator(KeyStroke.getKeyStroke('P', InputEvent.CTRL_MASK));
		
		
		//iniciandoMenuItensEditar
		menuItemLimpar = new JMenuItem("Limpar");
		menuItemDesfazer = new JMenuItem();
		menuItemExcluirSel = new JMenuItem();
		
		//iniciandoMenuItensFerramentas
		menuDesenhar = new JMenu("Desenhar");
		menuItemSelecaoApoio = new JMenuItem("Apoios");
		menuItemSelecaoForca = new JMenuItem(Util.getString("label_forcas"));
		menuItemSomatorio = new JMenuItem(Util.getString("label_somatorio"));
		menuItemDCL = new JMenuItem(Util.getString("label_diagrama_corpo_livre"));
		menuItemCalculadora = new JMenuItem("Calcuradora");
		
		//iniciandoMenuItensAjuda
		menuItemSobreSAENG2D = new JMenuItem(Util.getString("label_sobre_SAENG2D"));
		menuItemManual = new JMenuItem(Util.getString("label_manual"));
		menuItemExemplos = new JMenuItem(Util.getString("label_exemplos"));
		menuItemApareanciaPadraoJava = new JMenuItem(Util.getString("label_aparencia_padrao_java"));
		menuItemApareanciaSistema  = new JMenuItem(Util.getString("label_aparencia_padrao_sistema"));
		menuItemQtdObjetos = new JMenuItem(Util.getString("label_qtd_objetos_na_superficie"));
//		menuItemDetalharObjetoSelecionado = new JMenuItem("Detalhar objeto selecionado");
		
		//iniciandoOsubMenuDesenhar		
		menuItemCriarPonto = new JMenuItem("Ponto");
		menuItemCriarLinha = new JMenuItem("Linha");
		
		
	}
	
	//Inicializa os objetos do formulario
	private void montarLayoutObjetos() {
		
		//montandoMenuArquivo		
		menuArquivo.add(menuItemNovo);
		menuArquivo.addSeparator();
		menuArquivo.add(menuItemAbrir);
		menuArquivo.addSeparator();
		menuArquivo.add(menuItemSalvar);
		menuArquivo.add(menuItemSalvarComo);
		menuArquivo.add(menuItemImprimir);
		menuArquivo.addSeparator();
		menuArquivo.add(checkDesenharGrades);
//		menuArquivo.add(menuItemLadoGradeSuperficie);
//		menuArquivo.addSeparator();
		menuArquivo.addSeparator();
		menuArquivo.add(menuItemSair);
		
		//montandoMenuEditar
		menuEditar.add(menuItemLimpar);
		menuEditar.addSeparator();
		menuEditar.add(menuItemDesfazer);
		menuEditar.addSeparator();
		menuEditar.add(menuItemExcluirSel);
		
		//montandoSubMenuDesenhar
		menuDesenhar.add(menuItemCriarPonto);
		menuDesenhar.addSeparator();
		menuDesenhar.add(menuItemCriarLinha);

		
		//montandoMenuFerramentas
		menuFerramenta.add(menuDesenhar);
		menuFerramenta.addSeparator();
		menuFerramenta.add(menuItemSelecaoApoio);
		menuFerramenta.addSeparator();
		menuFerramenta.add(menuItemSelecaoForca);
		menuFerramenta.addSeparator();
		menuFerramenta.add(menuItemDCL);
		menuFerramenta.addSeparator();
		menuFerramenta.add(menuItemSomatorio);
		menuFerramenta.addSeparator();
		menuFerramenta.add(menuItemCalculadora);
		
		//montandoMenuAjuda
		menuAjuda.add(menuItemSobreSAENG2D);
		menuAjuda.add(menuItemManual);
		menuAjuda.add(menuItemExemplos);
		menuAjuda.addSeparator();
		menuAjuda.add(menuItemApareanciaPadraoJava);
		menuAjuda.add(menuItemApareanciaSistema);
		menuAjuda.addSeparator();
		menuAjuda.add(menuItemQtdObjetos);
//		menuAjuda.addSeparator();
//		menuAjuda.add(menuItemDetalharObjetoSelecionado);
		
		//montandoMenuPrincipal		
		menuPrincipal.add(menuArquivo);
		menuPrincipal.add(menuEditar);
		menuPrincipal.add(menuFerramenta);
		menuPrincipal.add(menuAjuda);
		setJMenuBar(menuPrincipal);
		
		//iniciandoBotoes	
		buttonSelecao = new JButton(getImagem("opcao_selecao.png"));
		buttonSelecao.setToolTipText("Selecionar objeto");
		
		buttonCriarLinha = new JButton(getImagem("opcao_linha_1.png"));
		buttonCriarLinha.setToolTipText("Criar linha");
		
		buttonCriarPonto = new JButton(getImagem("opcao_ponto.png"));
		buttonCriarPonto.setToolTipText("Criar ponto");
		
		buttonSelecaoApoio = new JButton(getImagem("opcao_apoio.png"));
		buttonSelecaoApoio.setToolTipText("Selecionar apoio");
		
		buttonSelecaoForca = new JButton(getImagem("opcao_forca.png"));
		buttonSelecaoForca.setToolTipText(Util.getString("label_selecionar_forca"));
		
		buttonDiagragraCorpoLivre = new JButton(getImagem("4.png"));
		buttonDiagragraCorpoLivre.setToolTipText(Util.getString("label_diagrama_corpo_livre"));

		buttonReacao = new JButton(getImagem("6.png"));
		buttonReacao.setToolTipText(Util.getString("label_reacao"));
		
		buttonSomatorioForca = new JButton(getImagem("5.png"));
		buttonSomatorioForca.setToolTipText(Util.getString("label_somatorio_forca"));
		
		buttonConfirmacaoFx = new JButton("OK");
		buttonCancelarFx = new JButton("Cancelar");
				
		buttonConfirmacaoFy = new JButton("OK");
		buttonCancelarFy = new JButton("Cancelar");
				
		buttonConfirmacaoM = new JButton("OK");
		buttonCancelarM = new JButton("Cancelar");
		
		buttonManual  = new JButton("MANUAL");
		buttonManual.setFont(new java.awt.Font("Tahoma", 1, 9));
		buttonExemplos  = new JButton("EXEMPLOS");
		buttonExemplos.setFont(new java.awt.Font("Tahoma", 1, 9));
		buttonCalculadora  = new JButton("CALCULADORA");
		buttonCalculadora.setFont(new java.awt.Font("Tahoma", 1, 9));
		
		buttonResultados = new JButton("RESULTADO");
		buttonResultados.setFont(new java.awt.Font("Tahoma", 1, 9));

		//iniciandoLabels
		labelDiagrama = new JLabel();
		labelDiagrama.setFont(new java.awt.Font("Tahoma", 1, 11));
		labelDiagrama.setText(Util.getString("label_diagrama_corpo_livre"));
		labelAreaCliente = new JLabel();
		labelAreaCliente.setFont(new java.awt.Font("Tahoma", 1, 11));
		labelAreaCliente.setText(Util.getString("label_area_cliente"));
		labelEquacoes = new JLabel();
		labelEquacoes.setFont(new java.awt.Font("Tahoma", 1, 11));
		labelEquacoes.setText(Util.getString("label_relatorio"));
		labelEqui_Externo = new JLabel();
		labelEqui_Externo.setFont(new java.awt.Font("Tahoma", 1, 11));
		labelEqui_Externo.setText(Util.getString("label_equilibrio_externo"));
		labelFx_Externo = new JLabel();
		labelFx_Externo.setFont(new java.awt.Font("Tahoma", 1, 11));
		labelFx_Externo.setText("Fx = 0");
		labelFy_Externo = new JLabel();
		labelFy_Externo.setFont(new java.awt.Font("Tahoma", 1, 11));
		labelFy_Externo.setText("Fy = 0");
		labelM_Externo = new JLabel();
		labelM_Externo.setFont(new java.awt.Font("Tahoma", 1, 11));
		labelM_Externo.setText("Mz = 0");
		
		jLabelTamanho = new JLabel();
		jLabelTamanho.setFont(new java.awt.Font("Tahoma", 1, 11));
		jLabelTamanho.setFont(new java.awt.Font("Tahoma", 1, 11));
		jLabelTamanho.setText("Tamanho do Elemento");

		jLabelEscala = new JLabel();
		jLabelEscala.setFont(new java.awt.Font("Tahoma", 1, 11));
		jLabelEscala.setText("Escala do Desenho");
		
		
		textAreaSomatorioFX = new JTextArea();
		textAreaSomatorioFY = new JTextArea();
		textAreaSomatorioM = new JTextArea();
		
//		textFieldTamanho = new JTextField();
//		jTextEscala = new JTextField();
		
		//iniciandoBarrasdeRolagem
		scrollSuperficie = new JScrollPane();
		scrollPaneDiagramaCorpoLivre = new JScrollPane();
		scrollPainelEquacoes = new JScrollPane();
		scrollSomatorioFX = new JScrollPane();
		scrollSomatorioFY = new JScrollPane();
		scrollSomatorioM = new JScrollPane();
		
		//iniciandoBarrasdeRolagem
		scrollSuperficie.setBackground(new java.awt.Color(255, 255, 255));
		scrollSuperficie.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
		scrollSuperficie.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

		scrollPaneDiagramaCorpoLivre.setBackground(new java.awt.Color(255, 255, 255));
		scrollPaneDiagramaCorpoLivre.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

		scrollPainelEquacoes.setBackground(new java.awt.Color(255, 255, 255));
		scrollPainelEquacoes.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPainelEquacoes.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
		
		scrollSomatorioFX.setBackground(new java.awt.Color(255, 255, 255));
		scrollSomatorioFX.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
		scrollSomatorioFX.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);

		scrollSomatorioFY.setBackground(new java.awt.Color(255, 255, 255));
		scrollSomatorioFY.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
		scrollSomatorioFY.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
		
		scrollSomatorioM.setBackground(new java.awt.Color(255, 255, 255));
		scrollSomatorioM.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
		scrollSomatorioM.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);

		//iniciarPaineis		
		//iniciandoPainelBotoes
		painelControleOeste = new JPanel();
		painelControleOeste.setBackground(new java.awt.Color(204, 204, 204));
		painelControleOeste.setBorder(BorderFactory.createEtchedBorder());
		GroupLayout groupLayout = new GroupLayout(painelControleOeste);
		painelControleOeste.setLayout(groupLayout);
		
		//adicionando_botoes
		groupLayout.setHorizontalGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
				.addGroup(GroupLayout.Alignment.TRAILING,groupLayout.createSequentialGroup().addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
						.addComponent(buttonSelecao,GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE).addContainerGap())
				.addGroup(groupLayout.createSequentialGroup().addContainerGap()
						.addComponent(buttonCriarLinha, GroupLayout.PREFERRED_SIZE, 50,GroupLayout.PREFERRED_SIZE).addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
				.addGroup(groupLayout.createSequentialGroup().addContainerGap()
						.addComponent(buttonCriarPonto, GroupLayout.PREFERRED_SIZE, 50,GroupLayout.PREFERRED_SIZE).addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
				.addGroup(GroupLayout.Alignment.TRAILING,groupLayout.createSequentialGroup().addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
						.addComponent(buttonSelecaoApoio,GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE).addContainerGap())
				.addGroup(groupLayout.createSequentialGroup().addContainerGap()
						.addComponent(buttonSelecaoForca, GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE).addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
				.addGroup(groupLayout.createSequentialGroup().addContainerGap()
						.addComponent(buttonDiagragraCorpoLivre, GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE).addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
				.addGroup(GroupLayout.Alignment.TRAILING,groupLayout.createSequentialGroup().addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
						.addComponent(buttonReacao,GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE).addContainerGap())
				.addGroup(GroupLayout.Alignment.TRAILING,groupLayout.createSequentialGroup().addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
						.addComponent(buttonSomatorioForca,GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE).addContainerGap())
				);
		
		groupLayout.setVerticalGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
						.addComponent(buttonSelecao, GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18).addContainerGap()
						.addComponent(buttonCriarLinha, GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18)
						.addComponent(buttonCriarPonto, GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18)
				 		.addComponent(buttonSelecaoApoio, GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18)
				 		.addComponent(buttonSelecaoForca,GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18)
				 		.addComponent(buttonDiagragraCorpoLivre,GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18)
						.addComponent(buttonReacao,GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18)
						.addComponent(buttonSomatorioForca,GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18)
						.addContainerGap(191, Short.MAX_VALUE)
		));
		
		//iniciando_Superficie
		GroupLayout jPanel4Layout = new GroupLayout(superficie);
		superficie.setLayout(jPanel4Layout);
		jPanel4Layout.setHorizontalGroup(jPanel4Layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGap(0, 1000, Short.MAX_VALUE));
		jPanel4Layout.setVerticalGroup(jPanel4Layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGap(0, 1000, Short.MAX_VALUE));
		
		//adicionando_barras_de_rolagem_em_superficie
		scrollSuperficie.setViewportView(superficie);

		//iniciando_Painel_Driagrama
		painelDiagramaCorpoLivre = new JPanel();
		painelDiagramaCorpoLivre.setBackground(new java.awt.Color(255, 239, 204));
		GroupLayout jPanel3Layout = new GroupLayout(painelDiagramaCorpoLivre);
		painelDiagramaCorpoLivre.setLayout(jPanel3Layout);
		jPanel3Layout.setHorizontalGroup(jPanel3Layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGap(0, 500, Short.MAX_VALUE));
		jPanel3Layout.setVerticalGroup(jPanel3Layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGap(0, 500, Short.MAX_VALUE));
		
		//adicionando_barras_de_rolagem
		scrollPaneDiagramaCorpoLivre.setViewportView(painelDiagramaCorpoLivre);
		
		//iniciando_os_subpaineis_do_painel_Equações
		scrollSomatorioFX.setViewportView(textAreaSomatorioFX);
		textAreaSomatorioFX.setEditable(false);
		scrollSomatorioFY.setViewportView(textAreaSomatorioFY);
		textAreaSomatorioFY.setEditable(false);
		scrollSomatorioM.setViewportView(textAreaSomatorioM);
		textAreaSomatorioM.setEditable(false);
				
		painelBotoesSomatorioX = new JPanel();
		GridLayout jPanelLayout = new GridLayout();
		painelBotoesSomatorioX.setLayout(jPanelLayout);
		painelBotoesSomatorioX.add(buttonConfirmacaoFx);
		painelBotoesSomatorioX.add(buttonCancelarFx);
		painelBotoesSomatorioX.setVisible(false);
				
		painelBotoesSomatorioY = new JPanel();
		painelBotoesSomatorioY.setLayout(jPanelLayout);
		painelBotoesSomatorioY.add(buttonConfirmacaoFy);
		painelBotoesSomatorioY.add(buttonCancelarFy);
		painelBotoesSomatorioY.setVisible(false);
				
		painelBotoesSomatorioM = new JPanel();
		painelBotoesSomatorioM.setLayout(jPanelLayout);
		painelBotoesSomatorioM.add(buttonConfirmacaoM);
		painelBotoesSomatorioM.add(buttonCancelarM);
		painelBotoesSomatorioM.setVisible(false);
		
		
		JLabel jLabelImage = new JLabel();
		jLabelImage.setIcon(new ImageIcon(getClass().getResource("/imagens/direcoes.png")));
		
		
		painelAuxiliar = new JPanel();
		GroupLayout painelAuxiliarLayout = new GroupLayout(painelAuxiliar);
		painelAuxiliar.setLayout(painelAuxiliarLayout);
		painelAuxiliarLayout.setHorizontalGroup(painelAuxiliarLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
				.addGroup(painelAuxiliarLayout.createSequentialGroup()
						.addGroup(painelAuxiliarLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
//								.addGroup(painelAuxiliarLayout.createSequentialGroup().addGap(5, 5, 5)
//										.addComponent(jLabelTamanho).addGap(10, 10, 10)
//										.addComponent(textFieldTamanho,10,155,155)).addGap(5, 5, 5)
//								.addGroup(painelAuxiliarLayout.createSequentialGroup().addGap(5, 5, 5)
//										.addComponent(jLabelEscala).addGap(10,50,50)
//										.addComponent(jTextEscala,10,170,170).addGap(5, 5, 5))
								.addGroup(painelAuxiliarLayout.createSequentialGroup().addGap(10,50,50)
										.addComponent(jLabelImage))
								.addGroup(painelAuxiliarLayout.createSequentialGroup().addGap(5,15,15)
										.addComponent(buttonManual,10,120,120).addGap(5, 5, 5)
										.addComponent(buttonExemplos,10,120,120).addGap(5, 5, 5))
								.addGroup(painelAuxiliarLayout.createSequentialGroup().addGap(5,15,15)
										.addComponent(buttonCalculadora,10,120,120).addGap(5, 5, 5)
										.addComponent(buttonResultados,10,120,120).addGap(5,5,5))
								)));
		
		
		
		painelAuxiliarLayout.setVerticalGroup(painelAuxiliarLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
				.addGroup(painelAuxiliarLayout.createSequentialGroup().addContainerGap(10,Short.MAX_VALUE)
//						.addGroup(painelAuxiliarLayout.createParallelGroup()
//								.addComponent(jLabelTamanho)
//								.addComponent(textFieldTamanho,10,25,25)).addGap(10, 20, 20)
//						.addGroup(painelAuxiliarLayout.createParallelGroup().addGap(10, 25, 25)
//								.addComponent(jLabelEscala)
//								.addComponent(jTextEscala,10,25,25)).addGap(10, 20, 20)
						.addComponent(jLabelImage).addGap(10, 20, 20)
						.addGroup(painelAuxiliarLayout.createParallelGroup()
								.addComponent(buttonManual,10,30,30)
								.addComponent(buttonExemplos,10,30,30)).addGap(5, 5, 5)
						.addGroup(painelAuxiliarLayout.createParallelGroup()
								.addComponent(buttonCalculadora,10,30,30)
								.addComponent(buttonResultados,10,30,30))
						));
		
		
		//iniciandoPainelEquações	
		painelEquacoes = new JPanel();
		painelEquacoes.setBackground(new java.awt.Color(255, 254, 254));
		GroupLayout painelEquacoesLayout = new GroupLayout(painelEquacoes);
		painelEquacoes.setLayout(painelEquacoesLayout);
		painelEquacoesLayout.setHorizontalGroup(painelEquacoesLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
				.addGroup(painelEquacoesLayout.createSequentialGroup()
						.addGroup(painelEquacoesLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
								.addComponent(labelFx_Externo)
								.addComponent(labelEqui_Externo)
								.addComponent(scrollSomatorioFX,50, 299, GroupLayout.PREFERRED_SIZE)
								.addComponent(painelBotoesSomatorioX,50, 299, GroupLayout.PREFERRED_SIZE)
								.addComponent(labelFy_Externo)
								.addComponent(scrollSomatorioFY, 50, 299, GroupLayout.PREFERRED_SIZE)
								.addComponent(painelBotoesSomatorioY,50, 299, GroupLayout.PREFERRED_SIZE)
								.addComponent(labelM_Externo)
								.addComponent(scrollSomatorioM, 50, 299, GroupLayout.PREFERRED_SIZE)
								.addComponent(painelBotoesSomatorioM,50, 299, GroupLayout.PREFERRED_SIZE))
						));
		
		painelEquacoesLayout.setVerticalGroup(painelEquacoesLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
				.addGroup(painelEquacoesLayout.createSequentialGroup().addGap(5, 5, 5)
						.addComponent(labelEqui_Externo).addGap(10, 10, 10)
						.addComponent(labelFx_Externo).addGap(5, 5, 5)
						.addComponent(scrollSomatorioFX, 10, 50, 50)
						.addComponent(painelBotoesSomatorioX, 10, 20,20).addGap(5,5,5)
						.addComponent(labelFy_Externo).addGap(5,5, 5)
						.addComponent(scrollSomatorioFY, 10, 50,50)
						.addComponent(painelBotoesSomatorioY, 10,20,20).addGap(5, 5, 5)
						.addComponent(labelM_Externo).addGap(5, 5,5)
						.addComponent(scrollSomatorioM,10, 50, 50)
						.addComponent(painelBotoesSomatorioM, 10, 20,20)
						));
		scrollPainelEquacoes.setViewportView(painelEquacoes);
				
		//layoutGeral
		GroupLayout layout = new GroupLayout(getContentPane());
		getContentPane().setLayout(layout);
		layout.setHorizontalGroup(
				layout.createParallelGroup(GroupLayout.Alignment.LEADING)
						.addGroup(layout.createSequentialGroup().addComponent(painelControleOeste, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18)
										.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
												.addComponent(scrollSuperficie, GroupLayout.DEFAULT_SIZE, 478, Short.MAX_VALUE)
												.addComponent(scrollPaneDiagramaCorpoLivre, GroupLayout.DEFAULT_SIZE, 478, Short.MAX_VALUE)
												.addComponent(labelDiagrama)
												.addComponent(labelAreaCliente)).addGap(18, 18, 18)
										.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
												.addComponent(labelEquacoes)
												.addComponent(scrollPainelEquacoes,	50, 300, GroupLayout.PREFERRED_SIZE)
												.addComponent(painelAuxiliar,50, 300, GroupLayout.PREFERRED_SIZE))
												.addContainerGap()
		));
		
		
		layout.setVerticalGroup(
				layout.createParallelGroup(GroupLayout.Alignment.LEADING)
					.addGroup(GroupLayout.Alignment.TRAILING,layout.createSequentialGroup()
								.addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
										.addComponent(painelControleOeste, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
										.addGroup(layout.createSequentialGroup().addContainerGap()
												.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
														.addComponent(labelAreaCliente)
														.addComponent(labelEquacoes)).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
												.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
														.addGroup(layout.createSequentialGroup()
																.addComponent(scrollSuperficie, GroupLayout.DEFAULT_SIZE, 283,Short.MAX_VALUE).addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
																.addComponent(labelDiagrama).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
																.addComponent(scrollPaneDiagramaCorpoLivre, GroupLayout.DEFAULT_SIZE, 251, Short.MAX_VALUE))
																.addGroup(layout.createSequentialGroup()
																		.addComponent(scrollPainelEquacoes, 50, 300, Short.MAX_VALUE)
																		.addComponent(painelAuxiliar,50, 300, Short.MAX_VALUE)
																		.addGap(10, 10, Short.MAX_VALUE))
														)
												)
										).addContainerGap()
								));	
		
		
	}
	
	private void manipuladoresEvento() {
		InputMap inputMap = getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
		ActionMap actionMap = getRootPane().getActionMap();
		
		menuItemNovo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				superficie.novo();
			}
		});
		menuItemAbrir.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				superficie.abrir();
			}
		});
//		menuItemSalvar.addActionListener(new ActionListener() {
//			public void actionPerformed(ActionEvent e) {
//				superficie.salvar(false, false);
//			}
//		});		
//		menuItemSalvarComo.addActionListener(new ActionListener() {
//			public void actionPerformed(ActionEvent e) {
//				superficie.salvarComo();
//			}
//		});
		checkDesenharGrades.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				superficie.getGrade().setDesenhar(checkDesenharGrades.isSelected());
				superficie.repaint();
			}
		});
//		menuItemLadoGradeSuperficie.addActionListener(new ActionListener() {
//			public void actionPerformed(ActionEvent e) {
//				TODO
//				superficie.alterarGrade();
//			}
//		});
//		checkDemarcarLinhaComPonto.addActionListener(new ActionListener() {
//			public void actionPerformed(ActionEvent e) {
//				TODO
//				superficie.setDemarcarLinhaComPonto(checkDemarcarLinhaComPonto.isSelected());
//			}
//		});
//		radioButtonCriacaoLinhaArrasto.addActionListener(new ActionListener() {
//			public void actionPerformed(ActionEvent e) {
//				opcaoCriarLinha(buttonCriarLinha);
//			}
//		});
//		radioButtonCriacaoLinhaClick.addActionListener(new ActionListener() {
//			public void actionPerformed(ActionEvent e) {
//				opcaoCriarLinha(buttonCriarLinha);
//			}
//		});
		
		menuItemLimpar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				superficie.limparSuperficie();
				if(superficieClone != null) {
					superficieClone.limparSuperficie();
				}
			}
		});

		
		ExcluirObjetoSelecionadoAction excluirObjetoSelecionadoAction = new ExcluirObjetoSelecionadoAction(superficie);
		inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "excluirObjetoSelecionado");
		actionMap.put("excluirObjetoSelecionado", excluirObjetoSelecionadoAction);
		menuItemExcluirSel.setAction(excluirObjetoSelecionadoAction);
		
		ExcluirUltimoObjetoAdicionadoAction excluirUltimoObjetoAdicionadoAction = new ExcluirUltimoObjetoAdicionadoAction(superficie);
		inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK),"excluirUltimoObjetoAdicionado");
		actionMap.put("excluirUltimoObjetoAdicionado", excluirUltimoObjetoAdicionadoAction);
		menuItemDesfazer.setAction(excluirUltimoObjetoAdicionadoAction);
		
		SalvarAction salvarAction = new SalvarAction(superficie);
		inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_S , InputEvent.CTRL_MASK),"salvar");
		actionMap.put("salvar", salvarAction);
		menuItemSalvar.setAction(salvarAction);
		
		SalvarComoAction salvarComoAction = new SalvarComoAction(superficie);
		inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_S , InputEvent.CTRL_MASK + InputEvent.SHIFT_MASK),"salvarComo");
		actionMap.put("salvarComo", salvarAction);
		menuItemSalvarComo.setAction(salvarComoAction);
		
		menuItemSair.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(superficie.isAlterado()) {
					int status = superficie.confirmar();
					if(status == JOptionPane.YES_OPTION) {
						superficie.salvar(false, false);
					}
				}
				System.exit(0);
			}
		});
		
		menuItemCalculadora.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				new Calculadora();
			}
		});
		
		menuItemSelecaoForca.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				abrirCaixaForca();
			}
		});
		
		menuItemCriarPonto.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				superficie.setManipulador(new LinhaDivisaoBuilder(superficie), buttonCriarPonto);
			}
		});
		menuItemCriarLinha.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				opcaoCriarLinha(buttonCriarLinha);
			}
		});
		menuItemSelecaoApoio.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				abrirCaixaApoio();
			}
		});

		menuItemApareanciaPadraoJava.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				alterarAparencia(UIManager.getCrossPlatformLookAndFeelClassName());
			}
		});
		menuItemApareanciaSistema.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				alterarAparencia(UIManager.getSystemLookAndFeelClassName());
			}
		});

		menuItemQtdObjetos.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Util.mensagem(FormularioPrincipal.this, Util.getString("qtd_objetos_na_superficie") + "\r\n" + superficie.getQtdObjetos());
			}
		});
		menuItemSobreSAENG2D.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(null, "Trabalho de conclusão de curso para obtenção" +
						" do título de graduação em Engenharia da Computação apresentado à Universiade Paulista - UNIP");
			}
		});
		
		

//		menuItemDetalharObjetoSelecionado.addActionListener(new ActionListener() {
//			public void actionPerformed(ActionEvent e) {
//				TODO
//				superficie.detalharObjetoSelecionado();
//			}
//		});

		buttonSelecao.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				superficie.setManipulador(new SelecionaObjetos(superficie), buttonSelecao);
			}
		});
		buttonCriarLinha.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				opcaoCriarLinha(buttonCriarLinha);
			}
		});
		buttonCriarPonto.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				superficie.setManipulador(new LinhaDivisaoBuilder(superficie), buttonCriarPonto);
			}
		});
		buttonSelecaoApoio.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				abrirCaixaApoio();
			}
		});
		buttonSelecaoForca.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				abrirCaixaForca();
			}
		});
		buttonDiagragraCorpoLivre.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				transportarSuperficie();
			}
		});
		buttonReacao.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				abrirCaixaReacao();
			}
		});
		buttonSomatorioForca.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				habilitarDesabilitarBotoes(false);
				painelBotoesSomatorioX.setVisible(true);
				textAreaSomatorioFX.setText("SELECIONE AS FORÇAS EM X");
				if(superficieClone != null) {
					SelecionadorSuperficieClone selecionador = (SelecionadorSuperficieClone) superficieClone.getManipulador();
					selecionador.setState(new SelecionadorStateX(selecionador));
				}
			}
		});
		buttonConfirmacaoFx.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				painelBotoesSomatorioY.setVisible(true);
				textAreaSomatorioFY.setText("SELECIONE AS FORÇAS EM Y");
				if(superficieClone != null) {
					SelecionadorSuperficieClone selecionador = (SelecionadorSuperficieClone) superficieClone.getManipulador();
					selecionador.setState(new SelecionadorStateY(selecionador));
				}
			}
		});
		buttonCancelarFx.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				habilitarDesabilitarBotoes(true);
				painelBotoesSomatorioX.setVisible(false);
				textAreaSomatorioFX.setText("");
				textAreaSomatorioFY.setText("");
				textAreaSomatorioM.setText("");
				if(superficieClone != null) {
					SelecionadorSuperficieClone selecionador = (SelecionadorSuperficieClone) superficieClone.getManipulador();
					selecionador.setState(new SelecionadorPonto(selecionador));
				}
			}
		});
		buttonConfirmacaoFy.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				painelBotoesSomatorioM.setVisible(true);
				if(superficieClone != null) {
					AbstratoObjeto[] objetos = superficieClone.getObjetos();
					for (int i =0 ;i<objetos.length;i++) {
						objetos[i].setSelecionado(false);
						//objetos[i].setHabilitado(false);
						//objetos[i].setCorSelecionado(objetos[i].getCorFundo());
						if(objetos[i] instanceof Linha){
							Linha linha = (Linha) objetos[i];
							Ponto ponto1 = linha.getPonto1();
							Ponto ponto2 = linha.getPonto2();
							ponto1.restaurarMemento();
							ponto2.restaurarMemento();
						}
					}
					superficieClone.setObjetos(objetos);
					superficieClone.repaint();
					textAreaSomatorioM.setText("SELECIONE UM PONTO DE APOIO");
					
					SelecionadorSuperficieClone selecionador = (SelecionadorSuperficieClone) superficieClone.getManipulador();
					selecionador.setState(new SelecionadorPonto2(selecionador));
				}
			}
		});
		buttonCancelarFy.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				painelBotoesSomatorioY.setVisible(false);
				textAreaSomatorioFY.setText("");
				textAreaSomatorioM.setText("");
				if(superficieClone != null) {
					SelecionadorSuperficieClone selecionador = (SelecionadorSuperficieClone) superficieClone.getManipulador();
					selecionador.setState(new SelecionadorStateX(selecionador));
				}
			}
		});
		buttonConfirmacaoM.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try {
					String equacao1 = textAreaSomatorioM.getText();
					String equacao2 = textAreaSomatorioFX.getText();
					String equacao3 = textAreaSomatorioFY.getText();
					
					for(int i =0;i<equacao1.length();i++){
						equacao1 = equacao1.replaceAll(",", ".");
					}
					for(int i =0;i<equacao1.length();i++){
						equacao2 = equacao2.replaceAll(",", ".");
					}
					for(int i =0;i<equacao1.length();i++){
						equacao3 = equacao3.replaceAll(",", ".");
					}
					
					MatrizCrammer analisador = new MatrizCrammer(equacao1,equacao2,equacao3);
					valorVariaveis = analisador.retornaValorVariaveis();
					if(valorVariaveis!=null){
						salvarImagens(superficie,"AreaCliente");
						salvarImagens(superficieClone, "DCL");
						new Resultados(equacao1,equacao2,equacao3, valorVariaveis);
						
					}else{
						JOptionPane.showMessageDialog(null,"Ainda não há resultados" );
					}
				} catch (Exception e1) {
					e1.printStackTrace();
					JOptionPane.showMessageDialog(null,e1);
				}
			}
		});
		buttonCancelarM.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				painelBotoesSomatorioM.setVisible(false);
				textAreaSomatorioM.setText("");
				if(superficieClone != null) {
					SelecionadorSuperficieClone selecionador = (SelecionadorSuperficieClone) superficieClone.getManipulador();
					selecionador.setState(new SelecionadorStateY(selecionador));
				}
			}
		});
		buttonManual.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				apagarImagens("AreaCliente");
				apagarImagens("DCL");
			}
		});
		buttonExemplos.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
			}
		});
		buttonCalculadora.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				new Calculadora();
			}
		});
		buttonResultados.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try{
					if(valorVariaveis!=null){
						String equacao1 = textAreaSomatorioM.getText();
						String equacao2 = textAreaSomatorioFX.getText();
						String equacao3 = textAreaSomatorioFY.getText();
						salvarImagens(superficie,"AreaCliente");
						salvarImagens(superficieClone, "DCL");
						new Resultados(equacao1,equacao2,equacao3, valorVariaveis);
						apagarImagens("AreaCliente");
						apagarImagens("DCL");	
					}else{
						JOptionPane.showMessageDialog(null,"Ainda não há resultados" );
					}
					
				}catch (Exception e1) {
					e1.printStackTrace();
					JOptionPane.showMessageDialog(null,e1);
				}
				
			}
		});
	}

	//Cria a caixa de selecao de um objeto apoio
	private void abrirCaixaApoio() {
		AbstratoObjeto[] selecionados = superficie.getObjetosSelecionados();
		Ponto ponto = null;
		for (AbstratoObjeto selecionado : selecionados) {
			 if(selecionado instanceof Ponto) {
				 ponto = (Ponto) selecionado;
				 break;
			 }
		}
		boolean localUsado = false;
		AbstratoObjeto[] objetos = superficie.getObjetos();
		for (AbstratoObjeto objeto : objetos) {
			if(objeto instanceof AbstratoAnimado) {
				AbstratoAnimado animado = (AbstratoAnimado) objeto;
				P2D p2d = animado.getP2DVetorReferencia();
				if(ponto != null) {
					if(ponto.estarSob(p2d.x, p2d.y)) {
						localUsado = true;
						break;
					}
				}
			}
		}		
		if(localUsado) {
			Util.mensagem(this, Util.getString("msg_local_usado"));
			return;
		}
		if(ponto != null) {
			new DialogoApoios(superficie, ponto);
		} else {
			Util.mensagem(this, Util.getString("msg_nenhum_ponto_selecionado"));
		}
	}

	private void abrirCaixaReacao() {
		Ponto ponto = null;
		if(superficieClone != null) {
			AbstratoObjeto[] objetos = superficieClone.getObjetos();
			for (AbstratoObjeto objeto : objetos) {
				if(objeto instanceof Linha) {
					Linha linha = (Linha) objeto;
					Ponto ponto1 = linha.getPonto1();
					Ponto ponto2 = linha.getPonto2();
					if(ponto1.guardandoMemento()) {
						ponto = ponto1;
					}
					if(ponto2.guardandoMemento()) {
						ponto = ponto2;
					}
				}
			}
		}
		if(ponto != null) {
			Ponto prototipo = (Ponto) ponto.prototipo();
			prototipo.setCorFundo(ponto.getCorFundoMemento());
			new DialogoReacao(superficieClone, prototipo);
		} else {
			Util.mensagem(this, Util.getString("msg_nenhum_ponto_selecionado_plotagem"));
		}
	}
	
	//Cria a caixa de selecao de um objeto forca
	private void abrirCaixaForca() {
		AbstratoObjeto[] selecionados = superficie.getObjetosSelecionados();
		Ponto ponto = null;
		Linha linha = null;
		for (AbstratoObjeto selecionado : selecionados) {
			 if(selecionado instanceof Ponto) {
				 ponto = (Ponto) selecionado;
				 break;
			 } else if(selecionado instanceof Linha) {
				 linha = (Linha) selecionado;
				 break;
			 }
		}
		if(ponto != null) {
			new DialogoForcaCentralizadaMomento(superficie, ponto);
		} else if(linha != null) {
			new DialogoForcaDistribuidaTriangular(superficie, linha);
		} else{
			Util.mensagem(this, Util.getString("msg_nenhum_objeto_selecionado_forca"));
		}
		
//		} else if (superficie.getObjetoDestacadoParaManipulacao() instanceof Linha) {
//			Linha linha = (Linha) superficie.getObjetoDestacadoParaManipulacao();
//			Vetor vetor = linha.getVetor();
//			Vetor vetor2 = new Vetor(vetor.x, 0);
//			int grau = (int) vetor.diferencaEmGraus(vetor2);
//			if(linha.getX2() > linha.getX1() || linha.getY2() > linha.getY1()) {
//				grau*=-1;
//			}
//			new DialogoForcaDist(superficie, grau);
//		} else {
//			JOptionPane.showMessageDialog(FormularioPrincipal.this, Util.getTexto("nenhum_ponto_selecionado"));
//		}
	}
	public void verificaSeHaPontoSelecionado(){
		Ponto ponto = null;
		int x = 0;
		int y = 0;
		if(superficieClone != null) {
			AbstratoObjeto[] objetos = superficieClone.getObjetos();
			for (AbstratoObjeto objeto : objetos) {
				if(objeto instanceof Linha) {
					Linha linha = (Linha) objeto;
					Ponto ponto1 = linha.getPonto1();
					Ponto ponto2 = linha.getPonto2();
					if(ponto1.guardandoMemento()) {
						ponto = ponto1;
						x = ponto.getX();
						y = ponto.getY();
					}
					if(ponto2.guardandoMemento()) {
						ponto = ponto2;
						x = ponto.getX();
						y = ponto.getY();
					}
				}
			}
		}
		if(ponto != null) {
			textAreaSomatorioM.setText("SELECIONE TODAS AS FORÇAS PARA CALCULO");
			SelecionadorSuperficieClone selecionador = (SelecionadorSuperficieClone) superficieClone.getManipulador();
			selecionador.setState(new SelecionadorStateMomento(selecionador,x,y));
		} else {
			Util.mensagem(this, Util.getString("msg_nenhum_ponto_selecionado_plotagem"));
		}
	}
	
	//Seleciona a estrategia de criacao de um objeto linha
	private void opcaoCriarLinha(JButton button) {
		superficie.setManipulador(new LinhaArrastoBuilder(superficie), button);
//		TODO
//		if(radioButtonCriacaoLinhaArrasto.isSelected()) {
//			superficie.setManipulador(new LinhaArrastoBuilder(superficie), button);
//		} else if(radioButtonCriacaoLinhaClick.isSelected()) {
//			superficie.setManipulador(new LinhaClickBuilder(superficie), button);
//		} else {
//			throw new RuntimeException();
//		}
	}
	
	private ImageIcon getImagem(String nome) {
		return new ImageIcon(getClass().getResource("/imagens/" + nome));
	}
	
	public Superficie getSuperficie() {
		return superficie;
	}
	
	private void alterarAparencia(String nomeClasse) {
		try {
			UIManager.setLookAndFeel(nomeClasse);
			SwingUtilities.updateComponentTreeUI(this);
		} catch (Exception e) {
			Util.mensagem(this, Util.getString("msg_erro_alteracao_aparencia") + "\r\n" + e.getMessage());
		}
	}
	
	private void transportarSuperficie() {
		superficieClone = superficie.clonarParaDiagramaCorpoLivre();
		if(superficieClone != null) {
			superficieClone.setManipulador(new SelecionadorSuperficieClone(superficieClone));
			superficieClone.getGrade().setDesenhar(false);
			superficieClone.setBackground(painelDiagramaCorpoLivre.getBackground());
			scrollPaneDiagramaCorpoLivre.setViewportView(superficieClone);
		}
	}

	public PacoteButton getPacoteButton() {
		return pacoteButton;
	}

	public void setPacoteButton(PacoteButton pacoteButton) {
		this.pacoteButton = pacoteButton;
	}

	public static void atualizarLabelStatus(Linha linha) {
//		textFieldTamanho.setText("" + (int)(linha.getComprimento() / Constantes.ESCALA_REAL));
	}
	
	private void habilitarDesabilitarBotoes(boolean b) {
		buttonDiagragraCorpoLivre.setEnabled(b);
		buttonSomatorioForca.setEnabled(b);
		buttonSelecaoApoio.setEnabled(b);
		buttonSelecaoForca.setEnabled(b);
		buttonCriarLinha.setEnabled(b);
		buttonCriarPonto.setEnabled(b);
		buttonSelecao.setEnabled(b);
		buttonReacao.setEnabled(b);
//		buttonConfirmacaoFx.setEnabled(b);
//		buttonCancelarFx.setEnabled(b);
//		buttonConfirmacaoFy.setEnabled(b);
//		buttonCancelarFy.setEnabled(b);
//		buttonConfirmacaoM.setEnabled(b);
//		buttonCancelarM.setEnabled(b);
	}
	public JTextArea getTextAreaSomatorioFX(){
		return textAreaSomatorioFX;
	}
	public JTextArea getTextAreaSomatorioFY(){
		return textAreaSomatorioFY;
	}
	public JTextArea getTextAreaSomatorioM(){
		return textAreaSomatorioM;
	}
	
	public void acumular(List<AbstratoForca> adicionados,JTextArea textArea) {
		if(adicionados.size() == 1) {
			if(adicionados.get(0).retornaOrientacao()){
				if(adicionados.get(0).retornaSentido()){
					textArea.setText(adicionados.get(0).getVariavelForca() + " = 0");
				}else{
					textArea.setText("- "+adicionados.get(0).getVariavelForca() + " = 0");
				}
			}else{
				if(adicionados.get(0).retornaSentido()){
					textArea.setText(adicionados.get(0).getVariavelForca() + " = 0");
				}else{
					textArea.setText("- "+adicionados.get(0).getVariavelForca() + " = 0");
				}
			}
			
		} else {
			StringBuilder sb = new StringBuilder();
			for(int i=0; i<adicionados.size(); i++) {
				if(adicionados.get(i).retornaSentido()){
					if(i==0){
						sb.append(adicionados.get(i).getVariavelForca());
					}else{
						sb.append(" + " + adicionados.get(i).getVariavelForca());
					}
				}else{
					sb.append(" - "+adicionados.get(i).getVariavelForca());
				}
			}
			if(adicionados.get(0).retornaOrientacao()){
				textArea.setText(sb.toString()+ " = 0");
			}else{
				textArea.setText(sb.toString()+ " = 0");
			}
			
		}		
	}
	
	public void acumularMomento(int xPM, int yPM, List<AbstratoForca> adicionados) {		
		if(adicionados.size() == 1) {//uma forca
			if(adicionados.get(0).retornaOrientacao()){//forca na vertical
				if(adicionados.get(0).retornaSentido()){//forca positiva ou momento horario
					if(adicionados.get(0).getX()==xPM){
						if(adicionados.get(0) instanceof ForcaMomento){
							textAreaSomatorioM.setText(adicionados.get(0).getVariavelForca() + " = 0");
						}
						if(adicionados.get(0) instanceof ForcaCentralizada ||adicionados.get(0) instanceof ForcaCentralizada2){
							textAreaSomatorioM.setText(adicionados.get(0).getVariavelForca() +" * 0" + " = 0");
						}
					}else if(adicionados.get(0).getX()<=xPM){
						if(adicionados.get(0) instanceof ForcaMomento){
							textAreaSomatorioM.setText(adicionados.get(0).getVariavelForca() + " = 0");
						}
						if(adicionados.get(0) instanceof ForcaCentralizada ||adicionados.get(0) instanceof ForcaCentralizada2){
							textAreaSomatorioM.setText(adicionados.get(0).getVariavelForca() +" * "+ (xPM - adicionados.get(0).getX())/3 + " = 0");
						}
					}else if(adicionados.get(0).getX()>=xPM){
						if(adicionados.get(0) instanceof ForcaMomento){
							textAreaSomatorioM.setText(adicionados.get(0).getVariavelForca() + " = 0");
						}
						if(adicionados.get(0) instanceof ForcaCentralizada ||adicionados.get(0) instanceof ForcaCentralizada2){
							textAreaSomatorioM.setText("- ("+adicionados.get(0).getVariavelForca() +" * "+ (adicionados.get(0).getX()-xPM)/3 + " ) = 0");
						}
					}
				}else{//forca negativa ou momento anti-horario
					if(adicionados.get(0).getX()==xPM){
						if(adicionados.get(0) instanceof ForcaMomento){
							textAreaSomatorioM.setText("- ("+adicionados.get(0).getVariavelForca() + " ) = 0");
						}
						if(adicionados.get(0) instanceof ForcaCentralizada ||adicionados.get(0) instanceof ForcaCentralizada2){
							textAreaSomatorioM.setText("- ("+adicionados.get(0).getVariavelForca() +" * 0 ) = 0");
						}
					}else if(adicionados.get(0).getX()<=xPM){
						if(adicionados.get(0) instanceof ForcaMomento){
							textAreaSomatorioM.setText("- ("+adicionados.get(0).getVariavelForca() + " ) = 0");
						}
						if(adicionados.get(0) instanceof ForcaCentralizada ||adicionados.get(0) instanceof ForcaCentralizada2){
							textAreaSomatorioM.setText("- ("+adicionados.get(0).getVariavelForca() +" * "+ (xPM - adicionados.get(0).getX())/3 + " ) = 0");
						}
					}else if(adicionados.get(0).getX()>=xPM){
						if(adicionados.get(0) instanceof ForcaMomento){
							textAreaSomatorioM.setText("- ("+adicionados.get(0).getVariavelForca() + " ) = 0");
						}
						if(adicionados.get(0) instanceof ForcaCentralizada ||adicionados.get(0) instanceof ForcaCentralizada2){
							textAreaSomatorioM.setText(adicionados.get(0).getVariavelForca() +" * "+ (adicionados.get(0).getX()-xPM)/3 + " = 0");
						}
					}
				}
			}else{//forca na horizontal 
				if(adicionados.get(0).retornaSentido()){//forca positiva 
					if(adicionados.get(0).getY()==yPM){
						if(adicionados.get(0) instanceof ForcaCentralizada ||adicionados.get(0) instanceof ForcaCentralizada2){
							textAreaSomatorioM.setText(adicionados.get(0).getVariavelForca() +" * 0 = 0");
						}
					}else if(adicionados.get(0).getY()<=yPM){
						if(adicionados.get(0) instanceof ForcaCentralizada ||adicionados.get(0) instanceof ForcaCentralizada2){
							textAreaSomatorioM.setText("- ("+adicionados.get(0).getVariavelForca() +" * "+ (yPM - adicionados.get(0).getY())/3 + ") = 0");
						}
					}else if(adicionados.get(0).getY()>=yPM){
						if(adicionados.get(0) instanceof ForcaCentralizada ||adicionados.get(0) instanceof ForcaCentralizada2){
							textAreaSomatorioM.setText(adicionados.get(0).getVariavelForca() +" * "+ (adicionados.get(0).getY()-yPM)/3 + " = 0");
						}
					}
				}else{//forca negativa 
					if(adicionados.get(0).getY()==yPM){
						if(adicionados.get(0) instanceof ForcaCentralizada ||adicionados.get(0) instanceof ForcaCentralizada2){
							textAreaSomatorioM.setText("- ("+adicionados.get(0).getVariavelForca() +" * 0 ) = 0");
						}
					}else if(adicionados.get(0).getY()<=yPM){
						if(adicionados.get(0) instanceof ForcaCentralizada ||adicionados.get(0) instanceof ForcaCentralizada2){
							textAreaSomatorioM.setText(adicionados.get(0).getVariavelForca() +" * "+(yPM - adicionados.get(0).getY())/3 +" = 0");
						}
					}else if(adicionados.get(0).getY()>=yPM){
						if(adicionados.get(0) instanceof ForcaCentralizada ||adicionados.get(0) instanceof ForcaCentralizada2){
							textAreaSomatorioM.setText("- ("+adicionados.get(0).getVariavelForca() +" * "+ (adicionados.get(0).getY()-yPM)/3 + " )"+ " = 0");
						}
					}
				} 
			}
		}else{//mais de uma forca
			StringBuilder sb = new StringBuilder();
			for(int i=0; i<adicionados.size(); i++) {
				if(adicionados.get(i).retornaOrientacao()){//forca na vertical
					if(adicionados.get(i).retornaSentido()){//forca positiva ou momento horario
						if(i==0){
							if(adicionados.get(i).getX()==xPM){
								if(adicionados.get(i) instanceof ForcaMomento){
									sb.append(adicionados.get(i).getVariavelForca());
								}
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(adicionados.get(i).getVariavelForca()+" * 0");
								}
							}else if(adicionados.get(i).getX()<=xPM){
								if(adicionados.get(i) instanceof ForcaMomento){
									sb.append(adicionados.get(i).getVariavelForca());
								}
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(adicionados.get(i).getVariavelForca()+" * "+ (xPM - adicionados.get(i).getX())/3);
								}								
							}else if(adicionados.get(i).getX()>=xPM){
								if(adicionados.get(i) instanceof ForcaMomento){
									sb.append(adicionados.get(i).getVariavelForca());
								}
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(" - ("+adicionados.get(i).getVariavelForca()+" * "+ (adicionados.get(i).getX()-xPM)/3+" )");
								}
							}
						}else{
							if(adicionados.get(i).getX()==xPM){
								if(adicionados.get(i) instanceof ForcaMomento){
									sb.append(" + "+adicionados.get(i).getVariavelForca());
								}
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(" + "+adicionados.get(i).getVariavelForca()+" * 0");
								}
							}else if(adicionados.get(i).getX()<=xPM){
								if(adicionados.get(i) instanceof ForcaMomento){
									sb.append(" + "+adicionados.get(i).getVariavelForca());
								}
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(" + "+adicionados.get(i).getVariavelForca()+" * "+ (xPM - adicionados.get(i).getX())/3);
								}								
							}else if(adicionados.get(i).getX()>=xPM){
								if(adicionados.get(i) instanceof ForcaMomento){
									sb.append(" + "+adicionados.get(i).getVariavelForca());
								}
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(" - ( "+adicionados.get(i).getVariavelForca()+" * "+ (adicionados.get(i).getX()-xPM)/3+" )");
								}
							}
						}
					}else{//forca negativa ou momento anti-horario
						if(i==0){//primeira forca
							if(adicionados.get(i).getX()==xPM){
								if(adicionados.get(i) instanceof ForcaMomento){
									sb.append(" - "+adicionados.get(i).getVariavelForca());
								}
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(" - ("+adicionados.get(i).getVariavelForca()+" * 0 )");
								}
							}else if(adicionados.get(i).getX()<=xPM){
								if(adicionados.get(i) instanceof ForcaMomento){
									sb.append(" - "+adicionados.get(i).getVariavelForca());
								}
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(" - ("+adicionados.get(i).getVariavelForca()+" * "+ (xPM - adicionados.get(i).getX())/3+" )");
								}								
							}else if(adicionados.get(i).getX()>=xPM){
								if(adicionados.get(i) instanceof ForcaMomento){
									sb.append(" - "+adicionados.get(i).getVariavelForca());
								}
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(adicionados.get(i).getVariavelForca()+" * "+ (adicionados.get(i).getX()-xPM)/3);
								}
							}
						}else{//o resto das forcas
							if(adicionados.get(i).getX()==xPM){
								if(adicionados.get(i) instanceof ForcaMomento){
									sb.append(" - "+adicionados.get(i).getVariavelForca());
								}
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(" - ("+adicionados.get(i).getVariavelForca()+" * 0 )");
								}
							}else if(adicionados.get(i).getX()<=xPM){
								if(adicionados.get(i) instanceof ForcaMomento){
									sb.append(" - "+adicionados.get(i).getVariavelForca());
								}
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(" - ("+adicionados.get(i).getVariavelForca()+" * "+ (xPM - adicionados.get(i).getX())/3+")");
								}								
							}else if(adicionados.get(i).getX()>=xPM){
								if(adicionados.get(i) instanceof ForcaMomento){
									sb.append(" - "+adicionados.get(i).getVariavelForca());
								}
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(" + "+adicionados.get(i).getVariavelForca()+" * "+ (adicionados.get(i).getX()-xPM)/3);
								}
							}
						}
					}
				}else{//forca na horizontal ------ momento sempre é vertical a não ser que mudemos isso
					if(adicionados.get(i).retornaSentido()){//positivo
						if(i==0){//primeira forca
							if(adicionados.get(i).getY()==yPM){
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(adicionados.get(i).getVariavelForca()+" * 0");
								}
							}else if(adicionados.get(i).getY()<=yPM){
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(" - ("+adicionados.get(i).getVariavelForca()+" * "+ (yPM - adicionados.get(i).getY())/3+" )");
								}								
							}else if(adicionados.get(i).getY()>=yPM){
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(adicionados.get(i).getVariavelForca()+" * "+ (adicionados.get(i).getY()-yPM)/3);
								}
							}
						}else{//o resto das forcas
							if(adicionados.get(i).getY()==yPM){
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(" + "+adicionados.get(i).getVariavelForca()+" * 0");
								}
							}else if(adicionados.get(i).getY()<=yPM){
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(" - ("+adicionados.get(i).getVariavelForca()+" * "+ (yPM - adicionados.get(i).getY())/3+" )");
								}								
							}else if(adicionados.get(i).getY()>=yPM){
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(" + "+adicionados.get(i).getVariavelForca()+" * "+ (adicionados.get(i).getY()-yPM)/3);
								}
							}
						}
					}else{//negativo
						if(i==0){//primeira forca
							if(adicionados.get(i).getY()==yPM){
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(adicionados.get(i).getVariavelForca()+" * 0");
								}
							}else if(adicionados.get(i).getY()<=yPM){
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(adicionados.get(i).getVariavelForca()+" * "+ (yPM - adicionados.get(i).getY())/3);
								}								
							}else if(adicionados.get(i).getY()>=yPM){
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(" - ("+adicionados.get(i).getVariavelForca()+" * "+ (adicionados.get(i).getY()-yPM)/3+" )");
								}
							}
						}else{//o resto das forcas
							if(adicionados.get(i).getY()==yPM){
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(" - "+adicionados.get(i).getVariavelForca()+" * 0");
								}
							}else if(adicionados.get(i).getY()<=yPM){
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(" + "+adicionados.get(i).getVariavelForca()+" * "+ (yPM - adicionados.get(i).getY())/3);
								}								
							}else if(adicionados.get(i).getY()>=yPM){
								if(adicionados.get(i) instanceof ForcaCentralizada ||adicionados.get(i) instanceof ForcaCentralizada2){
									sb.append(" - ( "+adicionados.get(i).getVariavelForca()+" * "+ (adicionados.get(i).getY()-yPM)/3+" )");
								}
							}
						}
					}
					
				}	
			}
			textAreaSomatorioM.setText(sb.toString()+ " = 0");
		}
	}
		
	public void salvarImagens(JPanel painel,String nome){
		if(painel == superficie){
			Grade g = superficie.getGrade();
			g.setDesenhar(false);
			superficie.setGrade(g);
			painel = superficie;
		}
		
		Color corDeFundo = painel.getBackground();
		
		painel.setBackground(Color.WHITE);
		BufferedImage imgPanel = new BufferedImage(painel.getWidth()-200, painel.getHeight()-650, BufferedImage.TYPE_INT_RGB);  
		Graphics2D img = imgPanel.createGraphics();  
		painel.paint(img); 
		
		try {
			ImageIO.write(imgPanel , "jpg", new File("/"+nome+".jpg"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		painel.setBackground(corDeFundo);
		
		if(painel == superficie){
			Grade g = superficie.getGrade();
			g.setDesenhar(true);
			superficie.setGrade(g);
			painel = superficie;
		}
	}
	public void apagarImagens(String nome){
		String im = "/"+nome+".jpg";  
		File f = new File(im);  
		f.delete();
	}
}